#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>


#include "Sockets.h"
#define SOCK_PATH "echo_socket"
#include "funcionesNIPC.h"

int main(void)
{
	int32_t socketDelPPD, t, longitud=-1;
	struct sockaddr_un cliente_consola;
	char cadenaDeMensaje[100];
	char lectura[100];
	char bufferAux[50];
	struct nipc_protocol punteroNIPCenviar;
	struct nipc_protocol punteroNIPCaRecibir;


	memset(lectura,'\0',100);

	socketDelPPD=prepararSocketUnix();

	printf("Intentando conectar consola...\n");

	conectarUnix(socketDelPPD,cliente_consola,longitud);

	printf("La Consola esta\n");

	while(memcmp(lectura,"salir",5)!=0){

		printf("> ");
		scanf(" %[^\n]", &lectura);

		if(memcmp(lectura,"i",1)==0){

			NIPC_enviar(socketDelPPD,'I',512,"info",0);
			NIPC_recibir(&socketDelPPD,&punteroNIPCaRecibir);
			printf(">La posicion del cabezal esta en el sector: %s\n",punteroNIPCaRecibir.payload);
			memset(&punteroNIPCaRecibir,'\0',sizeof(struct nipc_protocol));
			//return 1;
		}

		if(memcmp(lectura,"cambioTiempoEspera ",19)==0){

			memset(bufferAux,'\0',sizeof(bufferAux));
			sprintf(bufferAux,lectura+19);
			NIPC_enviar(socketDelPPD,'J',512,bufferAux,0);
			memset(&punteroNIPCaRecibir,'\0',sizeof(struct nipc_protocol));
			//return 1;
		}

		if(memcmp(lectura,"trace ",6)==0){
			memset(bufferAux,'\0',sizeof(bufferAux));
			sprintf(bufferAux,lectura+6);
			NIPC_enviar(socketDelPPD,'R',512,bufferAux,0);

			NIPC_recibir(&socketDelPPD,&punteroNIPCaRecibir);
			printf(">%s",punteroNIPCaRecibir.payload);
			while(punteroNIPCaRecibir.type != 'F'){   //F de finalizado el trace
				memset(&punteroNIPCaRecibir,'\0',sizeof(struct nipc_protocol));
				NIPC_recibir(&socketDelPPD,&punteroNIPCaRecibir);
				printf(">%s",punteroNIPCaRecibir.payload);
			}
			memset(&punteroNIPCaRecibir,'\0',sizeof(struct nipc_protocol));
		}

		if(memcmp(lectura,"clean ",6)==0){
			memset(bufferAux,'\0',sizeof(bufferAux));
			sprintf(bufferAux,lectura+6);
			NIPC_enviar(socketDelPPD,'C',512,bufferAux,0);
		}

		if(memcmp(lectura,"salir",5)==0){
			NIPC_enviar(socketDelPPD,'S',512,"",0);
		}
	} //cierra el while



	/*while(!feof(stdin)) {
		if (send(socketDelPPD, cadenaDeMensaje, strlen(cadenaDeMensaje), 0) == -1) {
			perror("send");
			exit(1);
			}

		if ((t=recv(socket1, cadenaDeMensaje, 100, 0)) > 0) {
			cadenaDeMensaje[t] = '\0';
			printf("echo> %s", cadenaDeMensaje);
			}
		else {
			if (t < 0) perror("recv");
			else printf("El Planificador cerro la conexion\n");
			exit(1);
			}
		printf("> ");
		fgets(cadenaDeMensaje, 100, stdin);
		}*/

	cerrar(socketDelPPD);

return 0;
}
